"Erase deleted messages from Rmail file and summary buffer."
(interactive)
(when (rmail-expunge-confirmed)
- (let ((old-total rmail-total-messages)
- (opoint (with-current-buffer rmail-buffer
- (when (rmail-buffers-swapped-p)
- (point)))))
- (rmail-only-expunge dont-show)
- (if (rmail-summary-exists)
- (rmail-select-summary (rmail-update-summary))
- (rmail-show-message-1 rmail-current-message)
- (if (and (eq old-total rmail-total-messages) opoint)
- (goto-char opoint))))))
+ (let ((was-deleted (rmail-message-deleted-p rmail-current-message))
+ (was-swapped (rmail-buffers-swapped-p)))
+ (rmail-only-expunge t)
+ (unless dont-show
+ (if (rmail-summary-exists)
+ (rmail-select-summary (rmail-update-summary))
+ ;; If we expunged the current message, a new one is current now,
+ ;; so show it. If we weren't showing a message, show it.
+ (if (or was-deleted (not was-swapped))
+ (rmail-show-message-1 rmail-current-message)
+ ;; Show the same message that was being shown before.
+ (rmail-swap-buffers)
+ (setq rmail-buffer-swapped t)))))))
\f
;;;; *** Rmail Mailing Commands ***